import axios from 'axios'
import router from "../../router";
import {getToken} from "../../utils/auth";
import {MessageBox} from "element-ui";
import {Message} from "element-ui";
import store from "../../store";

// axios通用配置
let axiosInstance = axios.create({
    baseURL: '/shop',
    timeout: 30000, // 请求超过30秒就报错
});

// request拦截器
axiosInstance.interceptors.request.use(
    req => {
        if (store.getters.getToken) {
            // 让每个请求都带上自定义的token，并根据实际情况进行修改
            req.headers['Authorization'] = getToken();
            console.log(req);
            return req;
        }
        return req
    }, error => {
        // 当请求错误时
        console.log(error);
        Promise.reject(error);
    });

// response拦截器
axiosInstance.interceptors.response.use(
    res => {
        if (res.status === 200) {
            console.log(res.data);
            if (res.data.status === 2) {
                // 登录过期，回到登录界面
                MessageBox.alert("登录过期,请重新登录");
                router.replace({path: '/'});
            }
            return Promise.resolve(res.data);
        } else {
            return Promise.reject(res.data);
        }
    },
    // 服务器状态码不是200的情况
    error => {
        console.log(error);
        switch (error.response.status) {
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径,在登录成功后返回当前页面，这一步需要在登录页操作。
            case 401:
                router.replace({path: '/'});
                break;
            case 404:
                Message.error('网络请求出错');
                break;
            case 500:
                Message.error('服务器出错');
                break;
        }
        return Promise.reject(error.response);
    }
);

export default axiosInstance;
